package root.item;

import root.historic.event.InteressePeloItemEvent;
import root.historic.event.ItemEvent;
import root.message.MessageType;
import root.user.User;

/**
 * Representa o interesse de um User por um Item
 * É um Listener interessado no evento de devolucao de um item em especifico
 * Quando o item eh devolvido o usuario interessado nele recebe um mensagem comunicando que o item
 * esta disponivel para emprestimo
 */
public class ItemInterest implements ItemListener{

	private User userInterested;
	private Item item;
	private boolean jaUsado;
	
	public ItemInterest(User userInterested, Item item){
		this.userInterested = userInterested;
		this.item = item;
		this.jaUsado = false;
	}
	
	@Override
	public void itemDevolvido(ItemEvent event) {
		if(event.getItem().equals(item) && ! jaUsado){
			jaUsado = true;
			String subject = "O item " +event.getItem().getName() +" do usuário " + event.getItem().getOwner().getName()+" está disponível";
			String message = "Agora você pode requisitar o empréstimo do "+event.getItem().getName()+".";
			
			try {
				event.getItem().getOwner().createMessage(userInterested, subject, message, MessageType.OFF_TOPIC);
			} catch (Exception e) {	}
		}
		
	}
	
	@Override
	public boolean equals(Object o){
		if(!(o instanceof ItemInterest) ){
			return false;
		}
		return ((ItemInterest)o).userInterested.equals(userInterested) && item.equals(((ItemInterest)o).item) && jaUsado == ((ItemInterest)o).jaUsado ;
	}

	@Override
	public void notifyInteressePeloItem(InteressePeloItemEvent arg0) {
	}

	@Override
	public void notifyItemCadastrado(ItemEvent arg0) {
		
	}

	@Override
	public void notifyPublicarPedido(PublicarPedidoEvent arg0) {
		
	}
	@Override
	public int hashCode() {
		return userInterested.hashCode() + item.hashCode();
	}

	@Override
	public void notifyOfereceuItem(ItemOferecidoEvent arg0) {
	}

	
}